// 将来需要自己在这个模块中，定义路由导航守卫【路由的权限控制】

// 1. 导入路由模块
import router from '@/router'
import store from '@/store'
// 导入 NProgress 包
import NProgress from 'nprogress'
// 一定要导入 NProgress 配套的样式
import 'nprogress/nprogress.css'

// 2. 为路由对象，挂载导航守卫
// beforeEach 是“全局前置”导航守卫
router.beforeEach((to, from, next) => {
  // 只要发生路由的导航跳转，就需要基于 NProgress.start() 展示进度条
  NProgress.start()

  // 1. 获取 token
  const token = store.getters.token

  // 2. 判断用户访问的是否为有权限的页面
  if (to.path === '/login' || to.path === '/404') {
    // 不需要访问权限
    if (to.path === '/login' && token) {
      // 在登录的前提下，想去登录页面，此时直接免登录
      next('/')
      // 只要在调用 next() 函数的时候，发生了强制跳转，必须手动关闭进度条。
      // 因为强制跳转不会触发 afterEach 这个后置导航守卫
      // 在触发了免登录操作之后，需要手动关闭进度条
      NProgress.done()
    } else {
      next()
    }
  } else {
    // 访问的是有权限的页面
    if (token) {
      // 获取用户的基本信息，需要调用 vuex 里面的 actions 函数，全局发请求获取用户基本信息
      store.dispatch('user/initUserInfo')
      next()
    } else {
      next('/login')
      NProgress.done()
    }
  }
})

// afterEach 是“全局后置”导航守卫
router.afterEach((to, from) => {
  console.log('---------------')
  // 关闭进度条
  NProgress.done()
})
